﻿using System.IO;
using System.Text;

namespace DataMonitor_Tools.Tools
{
    public static class FileOperator
    {
        public static bool FileIsUsed(string fileFullName)
        {
            bool result = false;
            //判断文件是否存在，如果不存在，直接返回 false
            if (!System.IO.File.Exists(fileFullName))
            {
                result = true;
            }//end: 如果文件不存在的处理逻辑
            else
            {//如果文件存在，则继续判断文件是否已被其它程序使用
                //逻辑：尝试执行打开文件的操作，如果文件已经被其它程序使用，则打开失败，抛出异常，根据此类异常可以判断文件是否已被其它程序使用。
                System.IO.FileStream fileStream = null;
                try
                {
                    fileStream = System.IO.File.Open(fileFullName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.None);
                    result = false;
                }
                catch (System.IO.IOException ex)
                {
                    result = true;
                    Console.WriteLine(ex.Message + ex.Source);
                }
                catch (System.Exception)
                {
                    result = true;
                }
                finally
                {
                    if (fileStream != null)
                    {
                        fileStream.Close();
                    }
                }
            }
            return result;
        }

        public static bool FileIsZero(string fileFullName)
        {
            bool result = false;
            //判断文件是否存在，如果不存在，直接返回 true
            if (!System.IO.File.Exists(fileFullName))
            {
                result = true;
            }//end: 如果文件存在的处理逻辑
            else
            {
                FileInfo fi;
                fi = new FileInfo(fileFullName);
                if (fi.Length / 1024 > 0)
                {
                    result = false;
                }
                else
                {
                    result = true;
                }
            }
            return result;
        }

        public static FileInfo[] GetLatestextFiles(this string directorypath, string ext)
        {
            DirectoryInfo root = new DirectoryInfo(directorypath);
            if (!root.Exists)
            {
                root.Create();
            }
            //getfiles始终按照文件名排序
            FileInfo[] files = root.GetFiles(ext);
            if (files.Length > 0)
            {
                var fc = new FileComparer();
                Array.Sort(files, fc);
            }
            return files;
         
        }

        public static string GetMessagefromLogfile(this string logfile)
        {
            var jsonString = string.Empty;
            if (File.Exists(logfile))
            {
                StreamReader sr = new StreamReader(logfile, Encoding.UTF8);
                string line = string.Empty;
                while ((line = sr.ReadLine()) != null)
                {
                    jsonString += line;
                }
                sr.Close();
                return jsonString;
            }
            else { return string.Empty; }
        }

    }
}
